# coding=utf-8
"""
作者：董新强 
创建时间：2020-3-23
描述：停止器
"""
import numpy

from catsim import irt


class Stoper:
    def __init__(self, theta_ls, selected_items_params_ls, answer_ls, min_error=0.3, max_item_num=50):
        """
        @param theta: 最新评估出来的theta
        @param selected_items: 答过的题的参数的列表
        @param answer_ls: 答案列表
        @param min_error: 当标准误差低于min_error就停止了
        @param max_item_num: 最多这么多题就停止了
        """
        self._stop = False  # 默认为不停止

        if theta_ls and selected_items_params_ls and len(theta_ls) > 20:  # 至少要答够20题
            # 答题到上限也就停止了
            if len(selected_items_params_ls) >= max_item_num:
                self._stop = True
                return

            # 标准误差降到一定程度就停止了
            if irt.see(theta_ls[-1], numpy.array(selected_items_params_ls, numpy.float)) < min_error:
                self._stop = True
                return

            # 连续5道题没做对也就停止了
            self._stop = True  # 先假设需要停止,看看有没有答对的,有答对了的就不用停止了
            for answer in answer_ls[-5:]:
                if answer:  # 如果后5题有一题答对了就不停止
                    self._stop = False

    @property
    def stop(self):
        return self._stop


if __name__ == '__main__':
    pass
